package com.qingke.bullfight;

import java.io.Serializable;
/**
 * 单张扑克牌
 * @author Administrator
 *
 */
public class Poker implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -7670228539836537871L;
	private String literal;//字面数 A2~10JQK小大王
	private String strSuit;//字面花色
	private int literalNum;//字面数字1~15
	private int number;//算是否有牛是的代表数字1~10
	private int value;//实际大小1~54
	private Suit suit;//花色
	
	//从小到大的花色，梅花方块红桃黑桃
	public static final Suit[] allSuits={Suit.CLUB,Suit.DIAMOND,Suit.HEART,Suit.SPADE,Suit.NOSUIT};
	public static final String[] strSuits={"♣","♦","♥","♠",""};
	/**
	 * 构造单张扑克牌，传入一个代表实际大小的数字
	 * @param value
	 */
	public Poker(int value){
		if(value<=54){
			this.value=value;
			initializeLiteralNum();
			initializeNumber();
			initializeLiteral();
			initializeSuit();
		}
		else{
			System.out.println("构造扑克牌失败，请输入正确的值");
		}
	}
	/**
	 * 静态方法
	 * 传入扑克牌力大小（1~54）
	 * 返回字符串具体牌面，例如「♦7」「♦4」「♠J」「♠7」「♦5」 
	 * @param value
	 * @return
	 */
	public static String valueToString(int value){
		return new Poker(value).toString();
	}
	/**
	 * 初始化字面数字
	 */
	private void initializeLiteralNum(){
		if(value==54)
			literalNum=15;
		else if(value==53)
			literalNum=14;
		else
			literalNum=(value-1)/4+1;
	}
	/**
	 * 初始化代表数字
	 */
	private void initializeNumber(){
		if(value<=36)
			number=(value-1)/4+1;
		else
			number=10;
	}
	/**
	 * 初始化字面字符串
	 */
	private void initializeLiteral() {
		if(value==54)
			literal="Red Joker";
		else if(value==53)
			literal="Black Joker";
		else if(value>=49&&value<=52)
			literal="K";
		else if(value>=45&&value<=48)
			literal="Q";
		else if(value>=41&&value<=44)
			literal="J";
		else if(value>=5&&value<=40)
			literal=""+((value-1)/4+1);
		else
			literal="A";
	}
	/**
	 * 初始化花色
	 */
	private void initializeSuit(){
		if(value>52){
			suit=allSuits[allSuits.length-1];
			strSuit=strSuits[strSuits.length-1];
		}
		else{
			suit=allSuits[(value-1)%4];
			strSuit=strSuits[(value-1)%4];
		}
	}
	/**
	 * 返回字面数字1-15
	 * @return
	 */
	public int getLiteralNum() {
		return literalNum;
	}
	/**
	 * 返回代表数字1-10
	 * @return
	 */
	public int getNumber() {
		return number;
	}
	/**
	 * 返回字面字符串
	 * @return
	 */
	public String getLiteral() {
		return literal;
	}
	/**
	 * 返回字面花色
	 * @return
	 */
	public String getStrSuit() {
		return strSuit;
	}
	/**
	 * 返回牌力值
	 * @return
	 */
	public int getValue() {
		return value;
	}
	/**返回花色
	 * 
	 * @return
	 */
	public Suit getSuit() {
		return suit;
	}
	/**
	 * 返回具体牌面，例如「♦7」「♦4」「♠J」「♠7」「♦5」 
	 */
	public String toString(){
		return "「"+strSuit+literal+"」";
	}
}
